package poo.exo1;

import java.util.Calendar;

public class CompteEpargne extends CompteAvecLimite
{
	final static double TAUXINTERETEPARGNE = 0.04;
	final static double MINIMUMPAROPERATIONEPARGNE = 50;
	final static double MINIMUMVERSEMENTINITIALEPARGNE = 100;

	public CompteEpargne(String nom, int numero, double solde, double plafond) throws MyException
	{
		super(nom, numero, solde, plafond);

		if (solde < MINIMUMVERSEMENTINITIALEPARGNE)
		{
			throw new MyException("Erreur: Votre versement initial n'est pas suffisant.\n Minimum"
					+ MINIMUMVERSEMENTINITIALEPARGNE + " €");
		}
		type = 2;
	}

	public boolean deposer(double somme) throws MyException
	{
		if (this.ouvert == false)
		{
			throw new MyException("Erreur: Vous ne pouvez pas effectuer de dépôt\n Votre compte epargne a été clôturé");
		}

		if (somme < MINIMUMPAROPERATIONEPARGNE)
		{
			throw new MyException("Erreur: Votre dépot n'est pas suffisant.\n Minimum" + MINIMUMPAROPERATIONEPARGNE
					+ " €");
		}

		this.solde += somme;
		System.out.println("Dépot de " + somme + " € effectué.");
		return true;

	}

	public boolean retirer(double somme) throws MyException
	{
		if (this.ouvert == false)
		{
			throw new MyException(
					"Erreur: Vous ne pouvez pas effectuer de retrait.\n Votre compte epargne a été clôturé.");
		}

		if (this.solde - somme < 0)
		{
			throw new MyException(
					"Erreur: Vous ne pouvez pas effectuer ce retrait.\n Aucun découvert n'est autorisé sur votre compte epargne.");
		}

		if (this.solde - somme < MINIMUMVERSEMENTINITIALEPARGNE)
		{
			System.out.println("Attention: Ce retrait entraine la clôturation de votre compte epargne.");
			this.ouvert = false;
		}

		this.solde -= somme;
		System.out.println("Retrait de " + somme + " € effectué.");
		return true;

	}

	public void calculerInteret() throws MyException
	{
		if (this.ouvert == false)
		{
			throw new MyException("Erreur: Votre compte a été cloturé.");
		}

		Calendar date = Calendar.getInstance();
		int mois = date.get(Calendar.MONTH);
		solde += (solde * (mois + 1 / 12) * TAUXINTERETEPARGNE);
	}

	@Override
	public boolean transferer(double somme, Compte cible) throws MyException
	{
		if (this.ouvert == false)
		{
			throw new MyException("Erreur: Votre compte a été cloturé.");
		}

		if (cible.isOuvert() && this.isOuvert())
		{
			if (cible.type != 3)
			{
				if (!this.retirer(somme))
				{
					throw new MyException("Erreur: Le transfert à échoué.");
				}
				if (!cible.deposer(somme))
				{
					throw new MyException("Erreur: Le transfert à échoué.");
				}
				System.out.println("Transfert effectué");
			}
		}

		return true;
	}

	@Override
	public String toString()
	{
		StringBuffer retValue = new StringBuffer();
		retValue.append("\n Plafond: ").append(this.plafond).append("\n");
		return super.toString() + retValue;
	}

}
